/*
* Copyright (C) Microsoft. All rights reserved.  
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not 
* use this file except in compliance with the License.  You may obtain a copy 
* of the License at http://www.apache.org/licenses/LICENSE-2.0  
* 
* THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
* WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
* MERCHANTABLITY OR NON-INFRINGEMENT. 
*
* See the Apache License, Version 2.0 for specific language governing 
* permissions and limitations under the License.
*
*/
#pragma once

#include <baja/common.hpp>

namespace journal { namespace services { namespace memory_tracking {

struct imemory_tracking_service : baja::app::irender_observer
{
    BAJA_INTERFACE_NOTAG(imemory_tracking_service)

    virtual void registerType(
        const baja::uint32& typeToken,
        const std::wstring& name,
        const b::Boolean& cumulative
        ) = 0;

    virtual baja::uint32 registerType(
        const std::wstring& name,
        const b::Boolean& cumulative
        ) = 0;

    virtual void logCreate(
        const baja::uint32& typeToken, 
        const baja::uint32& id,
        const size_t& sizeInBytes
        ) = 0;

    virtual void logExpand(
        const baja::uint32& typeToken, 
        const baja::uint32& id,
        const size_t& sizeInBytes
        ) = 0;

    virtual void logShrink(
        const baja::uint32& typeToken, 
        const baja::uint32& id,
        const size_t& sizeInBytes
        ) = 0;

    virtual void logDispose(
        const baja::uint32& typeToken, 
        const baja::uint32& id,
        const size_t& sizeInBytes
        ) = 0;
};


}}} // journal::services::memory_tracking
